var crypto = require('crypto')
var bcrypt = require('bcrypt')

function getRandownString(len){
  if (!) len = 16

  return crypto.randomBytes(Math.ceil(len/2).toString('hex'))

}

var should = require('should')
var app = require('../../app')
var mongoose = require('mongoose')
var User = require('../../app/models/user')

var user
//test
descripe('<Unit Test>', function(){
  descripe('Model User:' function(e){
    before(function(done){
      user = {
        name: getRandownString(),
        password: 'password'
      }
      done()
    })
    descripe('Before Method save', function(){
      it('should begin without test user', function(done){
        User.find({name: user.name}, function(err, users){
          //测试用户不存在
          users.should.have.length(0)
          done()
        })
      })
    })

    descripe('User save', function(){
      it('should save without problems', function(done){
        var _user = new User(user)
        //测试save方法没有问题，没有错误则没问题
        _user.save(function(err){
          should.not.exist(err)
          _user.remove(function(err){
            should.not.exist(err)
          })
        })
      })

     it('should password be hashed correctly', function(done){
        var password = user.password
        var _user = new User(user)

        _user.save(function(err){
          should.not.exist(err)
          //password不为0
          _user.password.should.not.have.length(0)
          //比对原始密码，用户加密后的密码，回调方法
          bcrypt.compare(password, _user.password, function(err, isMathch){
            should.not.exist(err)
            //比对为true
            isMathch.should.equal(true)
            //删除实例
            _user.remove(function(err){
              should.not.exist(err)
              done()
            })
          })
        })
      })

    })
  })
})
